#include "basetask.h"

namespace tinkle {

BaseTask::BaseTask(Task *task, BaseTask *parent)
    : _parent(parent) {
    _taskMgr = _parent->GetManager();
    _parent->AddChild(task);
}

BaseTask::BaseTask(TaskManager *mgr)
    : _parent(NULL),
      _taskMgr(mgr) {
    
}

BaseTask::~BaseTask() {
    // pass
}

BaseTask *BaseTask::GetParent() const {
    return _parent;
}

TaskManager *BaseTask::GetManager() const {
    return _taskMgr;
}

void BaseTask::Abort() {
    // TODO: implement this function
}

void BaseTask::AbortAllChild() {
    // TODO: implement this function
}

bool BaseTask::IsChildTask(Task *task) const {
    if (_children.find(task) != _children.end()) {
        return true;
    }
    return false;
}

bool BaseTask::HasChildTask() const {
    return (_children.size() > 0) ? true: false;
}

void BaseTask::AddChild(Task *child) {
    _children.insert(child);
}

}